#ifndef SESSIONFRIENDAREA_H
#define SESSIONFRIENDAREA_H
#include<QPushButton>
#include <QObject>
#include <QWidget>
#include<QScrollArea>
#include<QGridLayout>
#include<QLabel>
#include<QVBoxLayout>
#include<QScrollBar>
#include<QStyleOption>
#include<QPainter>

///////////////////////////////////////////
/// 不同列表的元素类型
//////////////////////////////////////////
typedef enum{
    SESSION_ITEM,
    FRIEND_ITEM,
    APPLY_ITEM
}ITEM_TYPE;


class SessionFriendItem;
class SessionFriendArea:public QScrollArea
{
    Q_OBJECT
private:
    QWidget *contains;
public:
    SessionFriendArea(QWidget*parent=nullptr);
    void addItem(ITEM_TYPE type,QPushButton*avatar,QString username,QString text);
    //除了当前选中的元素其他状态进行更新
    void ClearOtherSelected(SessionFriendItem*curentitem);

};
///////////////////////////////////////////////////////////
//////会话好友展示的一个元素 基类
/////////////////////////////////////////////////////////
class SessionFriendItem:public QWidget
{
    Q_OBJECT

private:
    //标记当前元素是否被选中
    bool selected=false;
    //按下状态
    bool pressed=false;
    //悬停状态
    bool hovered=false;
protected:
    SessionFriendArea*_owner;
    QPushButton *_avator;
    QString _username;
    QGridLayout*layout;
    QLabel*showname;
    //用来记录我们元素的父亲控件
    //将来该类是一个会话区域的一个元素
    //但是会被加入到SessionFrendAread中的成员变量中这样的话
    //我们该类的父控件就不是SessionFriendArea而是我们的成员变量containers
    //为了方便找到我们该类的管理模块类 因此有了这个变量
public:
    SessionFriendItem(SessionFriendArea*owner,QPushButton*avator,QString username,QWidget*parent=nullptr);
    //重写事件函数

    //该事件只要是显示或者被遮盖后显示都会调用该事件
    void paintEvent(QPaintEvent* event) override;
    //鼠标按下事件
    void mousePressEvent(QMouseEvent* event) override;
    //鼠标进入事件
    void enterEvent(QEnterEvent* event) override;
    //鼠标离开事件
    void leaveEvent(QEvent* event) override;
    // active 函数期望实现 Item 被点击之后的业务逻辑.
    virtual void active();
    //不同状态下样式的更新
    void updateStyle();
    //
    bool isSelected();
    //
    void setSelected(bool se);
};

/////////////////////////////////////
/// 会话区域元素的实现
////////////////////////////////////


class SessionItem:public SessionFriendItem
{
    Q_OBJECT
public:
    SessionItem(SessionFriendArea*owner,QPushButton*avator,QString name,QString message,QWidget*parent=nullptr);
    void active()override;
private:
    QLabel*usernameLabel;
};




//////////////////////
///好友列表元素的实现
/////////////////////

class FriendItem:public SessionFriendItem
{
    Q_OBJECT
public:
    FriendItem(SessionFriendArea*owner,QPushButton*avator,QString name,QString signature,QWidget*parent=nullptr);
    void active()override;
private:
    QLabel *signatureLabel;
};




//////////////////////////////////
///好友申请列表的元素实现
/////////////////////////////////

class ApplyItem:public SessionFriendItem
{
    Q_OBJECT
private:
    QPushButton *agreeBtn;
    QPushButton*disagreeBtn;
public:
    ApplyItem(SessionFriendArea*owner,QPushButton*avator,QString name,QWidget*parent=nullptr);
    void active()override;
};



#endif // SESSIONFRIENDAREA_H





